﻿using System;
using System.Globalization;
using System.Web;
using System.Web.Security;
using Viettel.VOFFICE.DAO.DAL;
using Viettel.VOFFICE.Web.Models;
using Viettel.VOFFICE.util;

namespace Viettel.VOFFICE.Web.Helpers
{
    public static class SessionsHelper
    {
        /// <summary>
        /// Đăng nhập hệ thống
        /// </summary>
        /// <param name="user"></param>
        /// <returns></returns>
        public static HttpCookie SignIn(UserModel user)
        {
            var userData = user.ToJsonString();
            var authTicket = new FormsAuthenticationTicket(
                  2, //giá trị mặc định của C# 
                  user.UserName.ToString(CultureInfo.InvariantCulture),
                  DateTime.Now,
                  DateTime.Now.AddHours(8), // hết hạn sau 8 tiếng
                  false,
                  userData,
                  "/");
            var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(authTicket))
                             {
                                 HttpOnly = true
                             };
            return cookie;
        }

        /// <summary>
        /// Kiểm tra xem người dùng hiện tại có đang đăng nhập ko
        /// </summary>
        /// <returns></returns>
        public static bool IsSignIn()
        {
            return HttpContext.Current.User.Identity.IsAuthenticated;
        }

        /// <summary>
        /// lấy thông tin của người dùng hiện tại
        /// </summary>
        /// <param name="unitOfWork"></param>
        /// <returns></returns>
        public static UserModel CurrentUser(UnitOfWork unitOfWork)
        {
            var id = 0;
            if (int.TryParse(HttpContext.Current.User.Identity.Name, out id))
            {
                if (unitOfWork == null) { unitOfWork = new UnitOfWork(); }
                var user = unitOfWork.UserRepository.GetById(id);
                return user != null ? new UserModel(user) : null;
            }
            return null;
        }
    }
}